BigDecimal ক্লাসটি Java.math প্যাকেজের একটি গুরুত্বপূর্ণ ক্লাস যা উচ্চ নির্ভুলতা এবং বড় দশমিক সংখ্যার সঙ্গে কাজ করার জন্য ব্যবহৃত হয়। BigDecimal দিয়ে scale এবং precision নিয়ন্ত্রণ করা যায়, যা গাণিতিক কাজের সঠিকতা এবং পারফরম্যান্স নিশ্চিত করে। এই নিবন্ধে আমরা BigDecimal এর মাধ্যমে scale সেট করা এবং scale পরিবর্তন করা এর বিভিন্ন পদ্ধতি এবং এর প্রয়োগগুলো দেখে নিব।
Scale কি এবং কেন এটি গুরুত্বপূর্ণ?
Scale হল একটি সংখ্যার দশমিক স্থানগুলির সংখ্যা, অর্থাৎ, দশমিক স্থান কতটি থাকবে তা নিয়ন্ত্রণ করে। Scale ব্যবহৃত হয় যাতে গাণিতিক গণনা করার সময় ফলাফল সঠিকভাবে নির্ধারণ করা যায় এবং নির্দিষ্ট দশমিক স্থান পর্যন্ত সঠিকভাবে রাউন্ড করা হয়।
যখন আপনি BigDecimal ব্যবহার করেন, তখন আপনি scale নির্ধারণ করতে পারেন যাতে দশমিক স্থানের সঠিক সংখ্যা নিশ্চিত করা যায়। এই ফিচারটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি অর্থনৈতিক হিসাব বা বৈজ্ঞানিক গণনা করছেন, যেখানে সঠিক দশমিক স্থান প্রয়োজন।
BigDecimal এর মাধ্যমে Scale সেট করা
setScale(int newScale, RoundingMode roundingMode) মেথডটি ব্যবহার করে আপনি scale নির্ধারণ করতে পারেন এবং সেইসাথে rounding mode নির্ধারণ করতে পারেন (যেমন HALF_UP, HALF_DOWN ইত্যাদি)। এই মেথডটি একটি নতুন BigDecimal অবজেক্ট রিটার্ন করে, যা নির্দিষ্ট scale এবং rounding mode অনুযায়ী রাউন্ড করা থাকে।
Syntax:
BigDecimal setScale(int newScale, RoundingMode roundingMode)
newScale: নতুন দশমিক স্থান (scale) নির্ধারণ করা।roundingMode: দশমিক স্থান রাউন্ড করার কৌশল (যেমনHALF_UP,HALF_DOWN,CEILING, ইত্যাদি)।
Example 1: Setting Scale Using setScale()
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalScaleExample {
public static void main(String[] args) {
// Create a BigDecimal object
BigDecimal bd1 = new BigDecimal("123.456789");
// Set scale to 2 decimal places (rounding mode HALF_UP)
BigDecimal bdScaled = bd1.setScale(2, RoundingMode.HALF_UP);
System.out.println("Scaled value (2 decimals, HALF_UP): " + bdScaled); // Output: 123.46
// Set scale to 3 decimal places (rounding mode HALF_DOWN)
BigDecimal bdScaledDown = bd1.setScale(3, RoundingMode.HALF_DOWN);
System.out.println("Scaled value (3 decimals, HALF_DOWN): " + bdScaledDown); // Output: 123.457
}
}
Output:
Scaled value (2 decimals, HALF_UP): 123.46
Scaled value (3 decimals, HALF_DOWN): 123.457
ব্যাখ্যা:
setScale(2, RoundingMode.HALF_UP)দিয়েBigDecimalএর মানকে 2 দশমিক স্থান পর্যন্ত round up করা হয়েছে।setScale(3, RoundingMode.HALF_DOWN)দিয়ে 3 দশমিক স্থান পর্যন্ত round down করা হয়েছে।
Scale পরিবর্তন করা
যদি BigDecimal অবজেক্টের scale পরিবর্তন করতে হয়, তবে setScale() মেথড ব্যবহার করা হয়। এটি মূল অবজেক্টের scale পরিবর্তন করে একটি নতুন BigDecimal অবজেক্ট রিটার্ন করে, কারণ BigDecimal একটি immutable ক্লাস।
Example 2: Changing Scale of BigDecimal
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalScaleChangeExample {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("123.456789");
// Change the scale to 3 decimal places
BigDecimal newBd = bd1.setScale(3, RoundingMode.HALF_UP);
System.out.println("New scale with 3 decimals: " + newBd); // Output: 123.457
// Change the scale to 1 decimal place
BigDecimal newBd2 = bd1.setScale(1, RoundingMode.HALF_UP);
System.out.println("New scale with 1 decimal: " + newBd2); // Output: 123.5
}
}
Output:
New scale with 3 decimals: 123.457
New scale with 1 decimal: 123.5
ব্যাখ্যা:
- এখানে
setScale()মেথডের মাধ্যমে scale পরিবর্তন করা হয়েছে এবং rounding mode নির্ধারণ করা হয়েছে, যা HALF_UP কৌশল ব্যবহার করেছে।
Important Points Regarding Scale in BigDecimal
setScale()মেথডটি নতুন অবজেক্ট রিটার্ন করে:BigDecimalক্লাসটি immutable, তাইsetScale()মেথডটি মূল অবজেক্ট পরিবর্তন না করে একটি নতুন অবজেক্ট রিটার্ন করে।
- Rounding:
setScale()মেথডটি rounding mode চয়েস নেয়ার সুযোগ দেয়। উদাহরণস্বরূপ, যদি আপনি 0.5 বা তার কাছাকাছি সংখ্যার জন্য নির্দিষ্ট দশমিক স্থান চান, তবে আপনিRoundingMode.HALF_UPবাRoundingMode.HALF_DOWNব্যবহার করতে পারেন।
- Handling Precision Loss:
- যদি আপনি কোনো সংখ্যাকে setScale() ব্যবহার করে উচ্চ precision এর জন্য রাউন্ড করেন, তবে তা রাউন্ডিংয়ের মাধ্যমে সংখ্যা ক্ষুদ্র হতে পারে। এই জন্য ব্যবহৃত rounding mode গুলি সঠিকতা বজায় রাখে।
Negative Scale:
- আপনি
BigDecimal-এর scale এর মান নেগেটিভও করতে পারেন, তবে এটি দশমিক স্থান পরিবর্তন করবে না, বরং সংখ্যাটির ভগ্নাংশ অংশের বাইরে শিফট করবে। এটি সাধারণত বড় সংখ্যাগুলির জন্য ব্যবহৃত হয়।
BigDecimal bd = new BigDecimal("123456.789"); BigDecimal negativeScale = bd.setScale(-2, RoundingMode.HALF_UP); // Output: 123500 System.out.println(negativeScale);- আপনি
BigDecimal ব্যবহার করে scale সেট করা এবং পরিবর্তন করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষত যখন আপনি high-precision calculations করছেন, যেমন ফাইনান্স বা বৈজ্ঞানিক হিসাব। Scale management এবং rounding অত্যন্ত গুরুত্বপূর্ণ গাণিতিক দক্ষতা প্রদান করে, যা অন্য সাধারণ float বা double টাইপের থেকে অনেক বেশি নির্ভুল।
setScale() মেথডের মাধ্যমে scale সেট করা হয় এবং সেইসাথে রাউন্ডিং মোডের মাধ্যমে সংখ্যার দশমিক স্থানকে সঠিকভাবে নিয়ন্ত্রণ করা যায়। BigDecimal ব্যবহার করে আপনি উচ্চ সঠিকতা এবং নির্ভুলতা অর্জন করতে পারেন, যা বিশেষত বড় সংখ্যাগুলির সঙ্গে কাজ করার সময় অপরিহার্য।
Read more